package com.java.datastructures;

import java.util.Arrays;

/**
 * @author wangning
 * @create 2021-05-12 21:18
 */
public class MyArray {
	//用于存储数据的数组
	private int[] elements;
	public MyArray() {
		elements = new int[0];
	}
	//获取数组的长度
	public int size() {
		return elements.length;
	}
	//向数组末尾添加一个元素
	public void add(int element) {
		//创建一个新的数组
		int[] newArr = new int[elements.length + 1];
		//把原数组中的元素赋值到新的数组中
		for (int i = 0; i < elements.length; i++) {
			newArr[i] = elements[i];
		}
		//把添加的元素放入到新的数组中
		newArr[elements.length] = element;
		//使用新数组替换旧数组
		elements = newArr;
	}
	//打印所有元素到控制台
	public void show() {
		System.out.println(Arrays.toString(elements));
	}

	public void delete(int index) {
		//判断下标是否越界
		if (index < 0 || index > elements.length - 1) {
			throw new RuntimeException("下标越界");
		}
		//创建一个新的数组，长度为length-1
		int[] newArr = new int[elements.length - 1];
		//赋值原有数据到新的数组
		for (int i = 0; i < newArr.length; i++) {
			//想要删除的元素前面的元素
			if (i < index) {
				newArr[i] = elements[i];
			} else {
				newArr[i] = elements[i + 1];
			}
		}
		//使用新数组替换旧数组
		elements = newArr;
	}

	//获取某个元素
	public int get(int index) {
		return elements[index];
	}
	//插入元素到指定位置
	public void insert(int element, int index) {
		//创建一个新的数组
		int[] newArr = new int[elements.length + 1];
		//将原数组中的元素放到新的数组中
		for (int i = 0; i < elements.length; i++) {
			//目标位置之前
			if (i < index) {
				newArr[i] = elements[i];
			} else {
				//目标位置之后
				newArr[i + 1] = elements[i];
			}
		}
		//插入新的元素
		newArr[index] = element;
		//使用新数组替换就数组
		elements = newArr;
	}
	//替换指定位置的元素
	public void set(int index, int element) {
		elements[index] = element;
	}

	//线性查找
	public int search(int target) {
		//遍历数组
		for (int i = 0; i < elements.length; i++) {
			if(elements[i] == target) {
				return i;
			}
		}
		return -1;
	}

}
